#include "head.h"
extern char name[64];
extern char ip[64];
extern char port[32];
int login_handler(int* socket_fd,char token[], bool* is_connect)
{
    transmit_t transmit;
    bzero(&transmit,sizeof(transmit));
    int flag_register=0;
    printf("请输入用户名：");
    scanf("%s",transmit.name);
    strcpy(transmit.flag,"LOGIN");

    //服务端查表，该用户是否存在；
    // 用户名存在，准备输入密码
    struct termios oldt, newt;
    // 获取当前终端设置
    tcgetattr(STDIN_FILENO, &oldt);
    newt = oldt;
    // 禁用回显
    newt.c_lflag &= ~(ECHO);
    // 应用新的终端设置（不回显）
    tcsetattr(STDIN_FILENO, TCSANOW, &newt);
    // 输入密码
    printf("请输入密码：");
    scanf("%s",transmit.password);
    // 恢复终端设置（恢复回显）
    tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
    char test_buf[10] = {0};
    if(recv(*socket_fd, test_buf, sizeof(test_buf), MSG_DONTWAIT) == 0){
        tcp_init(socket_fd, ip, port);
        *is_connect = 1;
    }
    send(*socket_fd,&transmit,sizeof(transmit),MSG_NOSIGNAL);
    recv(*socket_fd,&flag_register,sizeof(int),MSG_WAITALL);
    if(flag_register==400)
    {
        printf("账户不存在！\n");
        return 1;
    }
    if(flag_register==100)
    {
        printf("密码错误！\n");
        return 1;
    }

    //密码正确；
    strcpy(name,transmit.name);
    //接收返回的token;
    recv(*socket_fd,token,512,MSG_WAITALL);
    //printf("token: %s\n",token);
    printf("\n登录成功，欢迎来到花果山吗喽养殖基地\n");
    //客户端登录执行逻辑结束;
    return 0;
}

int register_handler(int* socket_fd, bool* is_connect)
{
    transmit_t transmit;
    int register_flag=0;//注册是否成功的标记；
    bzero(&transmit,sizeof(transmit));
    strcpy(transmit.flag,"REGISTER");
    printf("请输入要注册的用户名：");
    scanf("%s",transmit.name);
    // 输入用户名不存在，允许注册，发送密码；
    printf("请输入要注册的密码：");
    scanf("%s",transmit.password);
    char test_buf[10] = {0};
    if(recv(*socket_fd, test_buf, sizeof(test_buf), MSG_DONTWAIT) == 0){
        tcp_init(socket_fd, ip, port);
        *is_connect = 1;
    }
    send(*socket_fd,&transmit,sizeof(transmit),MSG_NOSIGNAL);

    //接收客户端返回的是否存在标记；
    recv(*socket_fd,&register_flag,sizeof(int),MSG_WAITALL);
    if(register_flag==500)
    {
        printf("该用户名已经存在，注册失败！\n");
        return 1;
    }
    if(register_flag==200)
    {
        printf("注册成功！\n");
        return 0;
    }
    printf("注册失败!\n");
    return 1;
}


int account(int* socket_fd,char* token, bool* is_connect)
{
    //char token[512]={0};
    while(1)
    {
        int flag=0;
        printf("1：登录  2：注册\n");
        scanf("%d",&flag);
        if(flag==1)
        {
            //登录逻辑

            char test_buf[10] = {0};
            if(recv(*socket_fd, test_buf, sizeof(test_buf), MSG_DONTWAIT) == 0){
                tcp_init(socket_fd, ip, port);
                *is_connect = 1;
            }
            int ret_login=login_handler(socket_fd,token, is_connect);
            if(ret_login==0)
            {
                //登录成功，跳出循环并返回token；
                break;
            }else
                //登录失败，返回继续循环；
                continue;
        }else if (flag==2)
        {
            //注册逻辑；
            char test_buf[10] = {0};
            if(recv(*socket_fd, test_buf, sizeof(test_buf), MSG_DONTWAIT) == 0){
                tcp_init(socket_fd, ip, port);
                *is_connect = 1;
            }
            register_handler(socket_fd, is_connect);

            //控制逻辑，无论成功注册或失败注册都继续循环，
            //直至登录成功后跳出循环；
            continue;
        }
        else{
            printf("输入的选项有误！\n");
            char ch;
            while((ch=getchar())!='\n'&&ch!=EOF)
                continue;
        }
    }
    return 0;
}
